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<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信号。

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352