博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QT知识点总结(一)
阅读量:2194 次
发布时间:2019-05-02

本文共 5334 字,大约阅读时间需要 17 分钟。

1、设置tab键的聚焦顺序:

static void QWidget::setTabOrder(QWidget * first, QWidget * second);

如果不想某子部件被聚焦,可为子部件设置:

setFocusPolicy(Qt::NoFocus);

2、设置编辑无右键菜单:

setContextMenuPolicy(Qt::NoContextMenu);

3、若要监视对话框内的某些子控件,可以在对话框的构造函数内为每个子控件安装事件过滤器,然后在对话框的eventFilter函数实现中做判断。注意:1、如果指定的事件被过滤及不需要通知子控件则必须返回true,否则返回false。2、如果在eventFilter()函数中删除接收对象,一定要返回true。如果返回false,Qt给已删除的对象发送事件,程序会crash。3、对话框和子控件必须处于同一线程,否则,过滤器将不被调用。

CustomerInfoDialog::CustomerInfoDialog(QWidget *parent)    : QDialog(parent){    firstNameEdit->installEventFilter(this);    lastNameEdit->installEventFilter(this);    cityEdit->installEventFilter(this);    phoneNumberEdit->installEventFilter(this);}

4、Q_UNSED(object),仅仅是为了消除变量未使用的编译警告

5、QKeySequence是键系列类,通常用它来判断一些常用的响应,例如在事件过滤时,通过QKeyEvent的bool QKeyEvent::matches( key) const函数来判断当前的按键组合状态,常用的有:QKeySequence::SelectAll、QKeySequence::Copy、QKeySequence::Paste等,也可以自行构造来判断,例如:(Qt::CTRL + Qt::Key_P);或(tr("Ctrl+p"));

6、软件重启实现方式:

void Widget::reboot(){    QString program = QApplication::applicationFilePath();    QStringList arguments = QApplication::arguments();    QString workingDirectory = QDir::currentPath();    //startDetached()将已分离的方式启动一个新进程    QProcess::startDetached(program, arguments, workingDirectory);    QApplication::exit();}

7、MSVC与MinGW的区别:

  • MSVC是指微软的VC编译器
  • MinGW是指是Minimalist GNU on Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时库。
     

8、QT寻找子控件函数:

1、T QObject::findChild(const QString & name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively)2、QList
QObject::findChildren(const QString &name=QString()) const例子:QPushButton *button = parentWidget->findChild
("button1");QList
lineEdit = tabWidget.findChildren
("lineEdit");

9、QDialog及QMainWindow的右下角默认有个QSizeGrip(提示窗口拉伸标志),使用setSizeGripEnabled()使能它

10、QDialog对话框类型:

  1. 模态对话框:整个应用程序窗口都无法接受用户响应,处于等待状态,后面的代码也得不到运行。
  2. 非模态对话框:用户仍然可以对其他窗口进行操作,不会因为这个对话框未关闭就不能操作其他窗口。
  3. 半模态对话框:阻塞窗口的响应,但是不会影响后续代码的执行。调用setModal(true)或者setWindowModality(),然后show()。

11、QWidget提供了setWindowModality()方法设置窗口半模态or非模态:

  • Qt::NonModal:非模态对话框(默认值)
  • Qt::WindowModal:只会阻塞父窗口、父窗口的父窗口及兄弟窗口。(半模态对话框)
  • Qt::ApplicationModal:阻塞整个应用程序的所有窗口。(半模态对话框)

12、QDialog的open()方法是显示一个半模态对话框,show()是显示对话框,不关心对话框类型,exec()显示模态对话框,并且阻塞整个程序,即内部将对话框属性设置为:Qt::ApplicationModal

13、QLabel设置文本对齐方式:

  • 1、成员函数:setAlignment(Qt::AlignCenter);
  • 2、样式表:setStyleSheet("qproperty-alignment: 'AlignBottom | AlignRight';");

14、QLabel设置文本过长时,自动换行:setWordWrap(true);需要文本内含有空格。

一般情况下,自动换行之后文本上下行会距离比较近,我们可以通过下面方式来设置行高。

pLabel->setWordWrap(true);QString strText = QStringLiteral("一去二三里,烟村四五家。亭台六七座,八九十枝花。");QString strHeightText = "

%2

";strText = strHeightText.arg(150).arg(strText);pLabel->setText(strText);

15、QLabel 如果过长,我们又不想换行,只想把其中一部分省略为…,那么我们可以通过QFontMetrics来实现:

QString strText = QStringLiteral("一去二三里,烟村四五家。亭台六七座,八九十枝花。");QString strElidedText = pLabel->fontMetrics().elidedText(strText, Qt::ElideRight, 200, Qt::TextShowMnemonic);pLabel->setText(strElidedText);

16、设置多个按钮互斥,可以先把几个按钮设置setCheckable(true),表示可以被选中,然后全部放到QButtonGroup中,设置setExclusive(true),表示其子按钮为互斥,通过关联信号buttonClicked(QAbstractButton*),知道哪个按钮被按下了

17、QCheckBox使用setTristate(true),启用其三态功能

18、QLineEdit默认具有由平台风格指南规定的边框,可以通过setFrame(false)将其关闭。

19、QLineEdit 可以通过addAction函数添加小部件,并指定其显示位置

QAction * addAction(const QIcon & icon, ActionPosition position)

20、QLineEdit 可以设置验证器(setValidator()),也可以设置输入掩码(setInputmask())

21、QSpinBox和QDoubleSpinBox均派生自QAbstractSpinBox。常用方法:

pSpinBox->setRange(20, 200);  // 范围pSpinBox->setSingleStep(10); // 步长pSpinBox->setValue(150);  // 当前值pSpinBox->setPrefix("$ ");  // 前缀pSpinBox->setSuffix(" %");  // 后缀pSpinBox->setWrapping(true);  // 开启循环pSpinBox->setSpecialValueText(tr("Automatic"));  // 特殊文本值即默认值

如果使用prefix()、suffix()和specialValueText()没有提供足够的控制,可以子类化QSpinBox,重写valueFromText()和textFromValue()。

21、QProgressBar-如果最小值和最大值都设置为0,进度条会显示一个繁忙指示,而不会显示当前值。setInvertedAppearance()用于设置进度条的行进方向。setTextVisible()设置进度条上的文本是否显示。setFormat()设置文本显示格式。

22、QDateTimeEdit-setCalendarPopup(true)设置添加日历弹出

23、QScrollArea通过成员函数setWidget()为一个控件指定一个滚动条。可以使用widget()函数来获取部件,视图可以使用setWidgetResizable()函数来调整大小。使用takeWidget()函数将部件从滚动区域中移除,移除的同时,会将部件的所有权传递到调用者,可以用QWidget来接收。

24、QToolBox类提供了一个列(选项卡式的)部件条目。Item的添加使用addItem(),或通过insertItem()在特定位置插入。

25、QSystemTrayIcon类为应用程序在系统托盘中提供一个图标。

26、QFileSystemWatcher类用于提供监视文件和目录修改的接口。

27、QDesktopServices类提供的函数用于访问常见的桌面服务。其常用静态成员函数如下:

bool openUrl(const QUrl & url);//如果成功,返回true;否则,返回false。//1、如果是网络URL,则以用户桌面环境的适当Web浏览器打开指定的的url。//2、如果是本地文件,将会使用默认程序打开,例如.txt使用notepad//3、如果是文件夹,则使用window直接打开//4、如果指定一个mail地址,将会打开e-mail客户端(例如:Outlook)//例如,下面的URL包含收件人(user@qt.com)、主题(Qt)和正文(I am a Qter)://QString strUrl = QString("mailto:%1?subject=%2&//body=%3").arg("user@qt.com").arg("Qt").arg("I am a Qter");//QDesktopServices::openUrl(QUrl(strUrl));
//为给定的scheme设置handler,receiver是接受者,method为receiver提供的处理函数。void setUrlHandler(const QString & scheme, QObject * receiver, const char * method)//例如:QDesktopServices::setUrlHandler("http", this, "openUrl_wmm");//表示所有使用QDesktopServices::openUrl()处理的http形式的url都不在使用默认的web浏览器打开,而是直//接调用你的成员函数openUrl_wmm(),注意此函数只有一个参数(即const QUrl &url),且必须为公有槽函数
//删除以上面方式指定的scheme预先设定的URL handler。void unsetUrlHandler(const QString & scheme)

28、QTimer可以设置定时器的类型,默认为:Qt::CoarseTimer

void setTimerType(Qt::TimerType atype)

如果直接调用QTimer的start()函数,而没有设置间隔,则定时器将会在没有事件的情况下,不停的发出timeout信号。

 

 

 

 

 

转载地址:http://ogsub.baihongyu.com/

你可能感兴趣的文章
【手机自动化测试】monkey测试
查看>>
【英语】软件开发常用英语词汇
查看>>
Fiddler 抓包工具总结
查看>>
【雅思】雅思需要购买和准备的学习资料
查看>>
【雅思】雅思写作作业(1)
查看>>
【雅思】【大作文】【审题作业】关于同不同意的审题作业(重点)
查看>>
【Loadrunner】通过loadrunner录制时候有事件但是白页无法出来登录页怎么办?
查看>>
【English】【托业】【四六级】写译高频词汇
查看>>
【托业】【新东方全真模拟】01~02-----P5~6
查看>>
【托业】【新东方全真模拟】03~04-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST05~06-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST09~10-----P5~6
查看>>
【托业】【新东方托业全真模拟】TEST07~08-----P5~6
查看>>
solver及其配置
查看>>
JAVA多线程之volatile 与 synchronized 的比较
查看>>
Java集合框架知识梳理
查看>>
笔试题(一)—— java基础
查看>>
Redis学习笔记(三)—— 使用redis客户端连接windows和linux下的redis并解决无法连接redis的问题
查看>>
Intellij IDEA使用(一)—— 安装Intellij IDEA(ideaIU-2017.2.3)并完成Intellij IDEA的简单配置
查看>>
Intellij IDEA使用(二)—— 在Intellij IDEA中配置JDK(SDK)
查看>>