QT中修改窗口的标题和图标

修改窗口标题

QT的窗口默认名字是MainWindow,在这里介绍两种方法修改窗口的Title

1.直接通过UI设计器修改:

我修改成了"我的窗口"运行后,显示如下:

好了,我们需要去找下,"我的窗口"这个字符串被QT放在哪里的?
用文本编辑器打开mainwindow.ui,可以看出,实际上是放在这个XML里面了

这个XML文件会被编译成代码(C#也是如此,不知道他们谁COPY谁)
找到build-ModifyTitleAndLogo-unknown-Debug\ui_mainwindow.h这个文件,打开,会发现有这样代码:

    void retranslateUi(QMainWindow *MainWindow)
    {
        MainWindow->setWindowTitle(QApplication::translate("MainWindow", "\346\210\221\347\232\204\347\252\227\345\217\243", 0, QApplication::UnicodeUTF8));
        pushButton->setText(QApplication::translate("MainWindow", "PushButton", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

346 210 221...243这些是什么呢?我猜是"我的窗口"的UTF8描述,因为一个中文用三个BYTE来表示,核对了一下UTF8编码,不是的
我又猜是UNICODE,但微软的UNICODE是一个汉字用两个BYTE表示,个数对不上,值也对不上,
我想,正如他代码写的那样,大概就是"我的窗口"的UnicodeUTF8的表述吧,这种编码在我的实际编程中没有遇到过,但这个并不影响理解.


2.直接用代码修改:
UTF-8编码早就大行其道了,C#的代码默认是UTF-8的,各种WEB也基本都是UTF-8,那我们就统一使用UTF-8
在函数的入口处,增加如下代码,同时包含头文件   #include <QTextCodec>

    QTextCodec *codec = QTextCodec::codecForName("UTF-8");    //获取系统编码
    QTextCodec::setCodecForLocale(codec);
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForTr(codec);

然后就可以在代码中支持设置窗口的标题了,设置的方法非常简单
代码是: setWindowTitle("带LOGO的窗口");

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setWindowTitle("带LOGO的窗口");
}

修改窗口图标

准备好一个文件logo.png
对项目点右键,添加新文件

选Qt->Qt Resource File -> choose

命名可以命名一个你喜欢的名字,我在这里命名为myres

进入编辑myres.qrc的界面:
添加->添加前缀
前缀用/线

然后点添加->添加文件,先择刚刚准备好的logo.png(注意:我的logo.png是放在项目根目录res目录下的)

然后用CTRL+S保存一下
回到设计MainWindow的界面设置器上,如下操作:

大功告成!

接下来,需要小小地思考一下,logo.png被QT放到哪儿去了?
实际上,我认为是放在EXE文件里去了,用16进制工具打开exe,搜索PNG,有两处
1.logo.png的文件名
2.logo.png的文件头PNG
如下:

代码见 http://q1024.com/files/qt_window-master.zip  000100目录下

 

posted @ 2022-09-07 23:11  xingzaicpp  阅读(5198)  评论(0编辑  收藏  举报