如何更改MDI subWindow图标?

时间:2014-06-23 12:50:25

标签: c++ qt qt5

请看下面的图片:

我已动态创建Sub Window

我尝试使用setWindowIcon函数,如下所示:

mdiWindows->setWindowIcon(QIcon("icon.ico"));

但是效果不好。

另请参阅以下代码(MDI窗口创建):

QWidget *widget = new QWidget(this);
QTextEdit *TextEdit = new QTextEdit(widget);
TextEdit->setObjectName("myTextEdit");
QMdiSubWindow *mdiWindows = ui->mdiArea->addSubWindow(widget);
mdiWindows->setGeometry(5, 5, 300, 250);
mdiWindows->setWindowTitle("untitled" + QString::number(ui->mdiArea->subWindowList().count()));
mdiWindows->setWindowState(Qt::WindowMaximized);
mdiWindows->layout()->addWidget(TextEdit);
mdiWindows->layout()->setContentsMargins(0,0,0,
mdiWindows->layout()->setSpacing(
mdiWindows->show();

如何更改MDI subWindow图标?

2 个答案:

答案 0 :(得分:3)

怎么了?

  

我尝试使用setWindowIcon函数,如下所示:   mdiWindows-> setWindowIcon(QIcon( “icon.ico”));

但你做错了,因为:

  1. 您在 mdiWindow本身上设置了图标,而不是它的子窗口。
  2. 此外,.ico适用于 Windows中的应用程序图标,您应该这样做 只需使用.jpg.png格式。可以找到默认支持格式列表的详细信息here
  3. (如果你坚持使用.ico文件,则会有一种解决方法。检查:".ico icons not showing up on Windows"


    解决方案:

    因此,请更改此行mdiWindows->setWindowIcon(QIcon("icon.ico"));

    进入: widget->setWindowIcon(QIcon(":/myIcon/icon.png"));

    (请注意,您可以在其他QWidget衍生品上执行相同的操作:QMainWindow,QDialog ...等以设置其窗口图标)

    换句话说,将上面的代码插入代码中:

    //QWidget *widget = new QWidget(this);
    //QTextEdit *TextEdit = new QTextEdit(widget);
    //TextEdit->setObjectName("myTextEdit");
    widget->setWindowIcon(QIcon(":/myIcon/icon.png")); 
    //QMdiSubWindow *mdiWindows = ui->mdiArea->addSubWindow(widget);
    //mdiWindows->setGeometry(5, 5, 300, 250);
    //mdiWindows->setWindowTitle("untitled" + QString::number(ui->mdiArea->subWindowList().count()));
    //mdiWindows->setWindowState(Qt::WindowMaximized);
    //mdiWindows->layout()->addWidget(TextEdit);
    //mdiWindows->layout()->setContentsMargins(0,0,0,
    //mdiWindows->layout()->setSpacing(
    //mdiWindows->show();
    

    enter image description here


    P.S。

    以防万一,如果您想稍后设置它们,可以调用QMdiArea::subWindowList()获取mdiWindows列表,然后分别在它们上面设置图标。例如:

    mdiWindows->subWindowList().at(1)->setWindowIcon(QIcon(":/myIcon/icon.png"));
    

    这也是一样的。

答案 1 :(得分:0)

我无法获得这个公认的答案。不知道这是否是特定于版本的错误,但我使用的是PyQt5,

from PyQt5.QtCore import QT_VERSION_STR
from PyQt5.Qt import PYQT_VERSION_STR
print(f"QT: {QT_VERSION_STR}, PYQT: {PYQT_VERSION_STR}")
# QT: 5.9.6, PYQT: 5.9.2

对我来说,解决方法是直接在QMdiSubWindow上设置图标,而在窗口小部件上设置

mdiArea = ...
widget = ...
subwindow = mdiArea.addSubWindow(widget)
subwindow.setWindowTitle("My Widget")
myicon = ...
subwindow.setWindowIcon(myicon)  # <-- this line
widget.show()

请注意,至少在Windows上,图标{strong>必须似乎是.ico文件,使用.png似乎不起作用,至少对我来说是这样。