如何更改 MDI 子窗口图标?

Lio*_*ing 6 c++ qt qt5

看下图:

我已经Sub Window动态创建了。

我尝试使用 setWindowIcon如下函数:

mdiWindows->setWindowIcon(QIcon("icon.ico"));
Run Code Online (Sandbox Code Playgroud)

但效果不佳。

另请参阅以下代码(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();
Run Code Online (Sandbox Code Playgroud)

如何更改MDI子窗口图标?

Tay*_*510 4

怎么了?

我尝试使用setWindowIcon如下函数: mdiWindows->setWindowIcon(QIcon("icon.ico"));

但你做错了,因为:

  1. 您在mdiWindow 本身而不是它的子窗口上设置图标。
  2. 此外,.ico对于Windows 中的应用程序图标,您应该只使用.jpg.png格式。默认支持格式列表的详细信息可以在这里找到。

(如果您坚持使用.ico文件,有一个解决方法。检查:“.ico 图标未显示在 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();
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


聚苯乙烯

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

mdiWindows->subWindowList().at(1)->setWindowIcon(QIcon(":/myIcon/icon.png"));
Run Code Online (Sandbox Code Playgroud)

这工作原理是一样的。