QT知识点总结(转载)

转自 https://blog.csdn.net/Chiang2018/article/details/102888785

----------------------

版权声明:本文为CSDN博主「王木木1214」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Chiang2018/article/details/102888785

-----------------------

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();

}

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对话框类型:

模态对话框:整个应用程序窗口都无法接受用户响应,处于等待状态,后面的代码也得不到运行。

非模态对话框:用户仍然可以对其他窗口进行操作,不会因为这个对话框未关闭就不能操作其他窗口。

半模态对话框:阻塞窗口的响应,但是不会影响后续代码的执行。调用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包含收件人([email protected])、主题(Qt)和正文(I am a Qter):

//QString strUrl = QString("mailto:%1?subject=%2&//body=%3").arg("[email protected]").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信号。

————————————————

版权声明:本文为CSDN博主「王木木1214」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Chiang2018/article/details/102888785

你可能感兴趣的:(QT知识点总结(转载))