我正在Linux上编写程序。我想在tabwidged上阅读ifconfig和screen。我不知道我怎么能这样做。
我找到了this example。我想升级一下。
我有很多错误
main.cpp: In function ‘int main(int, char**)’:
main.cpp:7:19: error: variable ‘QApplication app’ has initializer but incomplete type
/usr/include/qt4/QtGui/qtabwidget.h:167:14: error: ‘QTabBar* QTabWidget::tabBar() const’ is protected
main.cpp:21:14: error: within this context
main.cpp:21:15: error: invalid use of incomplete type ‘struct QTabBar’
/usr/include/qt4/QtGui/qtabwidget.h:56:7: error: forward declaration of ‘struct QTabBar’
main.cpp:21:33: error: incomplete type ‘QTabBar’ used in nested name specifier
main.cpp:21:63: error: ‘button3’ was not declared in this scope
main.cpp:23:1: error: ‘myprocess’ was not declared in this scope
main.cpp:25:11: error: ‘ps’ was not declared in this scope
main.cpp:26:9: error: ‘myTabWidget’ was not declared in this scope
make: *** [main.o] Error 1
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow *window = new QMainWindow();
window->setWindowTitle(QString::fromUtf8("MainWindow"));
window->resize(480, 480);
QWidget *centralWidget = new QWidget(window);
QTabWidget *tabs = new QTabWidget(centralWidget);
tabs->setFixedSize(440, 440);
tabs->addTab(new QWidget(),"TAB 1");
tabs->addTab(new QWidget(),"TAB 2");
tabs->addTab(new QWidget(),"TAB 3");
tabs->tabBar()->setTabButton(2, QTabBar::LeftSide,((QWidget*)(button3)));
QProcess myProcess;
myprocess.start("ifconfig");
if (myProcess.waitForStarted(-1)) {
while(ps.waitForReadyRead(-1)) {
myTabWidget.setText(1, myprocess.readAllStandardOutput());
}
}
window->setCentralWidget(centralWidget);
window->setCentralWidget(centralWidget);
window->show();
return app.exec();
}
答案 0 :(得分:2)
您正在寻找QProcess和/或QtNetwork,以便将此信息添加到标签窗口小部件中。
...
tabs->tabBar()->setTabButton(2, QTabBar::LeftSide,((QWidget*)(button3)));
QProcess myProcess;
myprocess.start("ifconfig");
if (myProcess.waitForStarted(-1)) {
while(ps.waitForReadyRead(-1)) {
myTabWidget.setText(your_index, myprocess.readAllStandardOutput());
}
}
window->setCentralWidget(centralWidget);
...
话虽如此,您可以将QtNetwork视为更具可移植性,因为“ifconfig”无法在Windows等上运行。您需要将其更改为ipconfig等等。
公平地说,即使在Linux上,也应该查看“ip”命令,而不是旧的,很难维护“ifconfig”。
因此,您将寻找具有适当跨平台解决方案的QNetworkInterface和QHostAddress。这是一个简短的例子:
foreach(const QNetworkInterface &interface, QNetworkInterface::allInterfaces())
qDebug() << interface.hardwareAddress();
foreach(const QHostAdress &address, QNetworkInterface::allAddresses())
qDebug() << address.toString();
答案 1 :(得分:0)
如果您要查找的只是IP地址,则可能需要使用gethostbyname()
而不是调用外部程序(例如Linux上的ifconfig或Windows上的ipconfig)。
如果您需要其他信息(除IP地址外),您可能还需要考虑从/ proc / net(仅限Linux)阅读: