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(QKeySequence::StandardKey key) const函数来判断当前的按键组合状态,常用的有:QKeySequence::SelectAll、QKeySequence::Copy、QKeySequence::Paste等,也可以自行构造来判断,例如:QKeySequence(Qt::CTRL + Qt::Key_P);或QKeySequence(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();
}
- 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<T> QObject::findChildren(const QString &name=QString()) const
例子:
QPushButton *button = parentWidget->findChild<QPushButton *>("button1");
QList<QLineEdit *> lineEdit = tabWidget.findChildren<QLineEdit *>("lineEdit");
9、QDialog及QMainWindow的右下角默认有个QSizeGrip(提示窗口拉伸标志),使用setSizeGripEnabled()使能它
10、QDialog对话框类型:
- 模态对话框:整个应用程序窗口都无法接受用户响应,处于等待状态,后面的代码也得不到运行。
- 非模态对话框:用户仍然可以对其他窗口进行操作,不会因为这个对话框未关闭就不能操作其他窗口。
- 半模态对话框:阻塞窗口的响应,但是不会影响后续代码的执行。调用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 = "<p style=\"line-height:%1%\">%2<p>";
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信号。