看下图:

我已经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子窗口图标?
我尝试使用
setWindowIcon如下函数: mdiWindows->setWindowIcon(QIcon("icon.ico"));
但你做错了,因为:
.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)
这工作原理是一样的。