2016-01-04 52 views
1

尋找:使用日期時間(灰色)和信息(紅色表示錯誤,橙色表示警告... - >未建立並且必須靈活的顏色數量)顯示日誌消息。有時我們需要打開郵件中的鏈接,打開未建立的行爲(上下文菜單,簡單的點擊 - >從不知道)如何將Widget作爲帶有2列的QListWidget(帶有一些約束)?

歷史記錄:1-我嘗試QTextBrowser與HTML文本樣式 - > 500行後,它開始減慢應用程序,經過很多後,它崩潰的應用程序

2-我試過QListWidget只有消息帶顏色(不是日期 - 時間),工作得很好!

所以,現在你明白我需要第二列,日期時間爲灰色。

我的問題是:通過保持我喜歡的QListWidget風格,最簡單,最有效的方法是做什麼。

我聽說QTreeWidgetQTableWidget要做到這一點,但是對於這些小部件,我最好改變哪些屬性? (總結:2列有2種不同的文本顏色,打開鏈接的功能,在QListWidget風格,並在底部總是滾動條)

的Windows,C++,Qt的5

+0

我用一個表格部件爲我登錄我的Qt應用程序。 – drescherjm

+1

「QTreeWidget」將項目顯示爲樹(如Windows資源管理器的左列)。你應該使用'QTableWidget',但我不認爲你將能夠顯示沒有一些代碼的鏈接。看看Qt文檔。這是最好的開始。 –

回答

0

MainWindow.h

#include <QMainWindow> 
#include <QTreeWidget> 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

public slots: 
    void contextMenuRequest(const QPoint& pos); 
    void openLink(); 

private: 
    QTreeWidget* treeWidget; 
}; 

MainWindow.cpp

#include "mainwindow.h" 
#include <QTreeWidgetItem> 
#include <QStringList> 
#include <QBrush> 
#include <QAction> 
#include <QMenu> 
#include <QTime> 

MainWindow::MainWindow(QWidget *parent) 
    : QMainWindow(parent) 
{ 
    treeWidget = new QTreeWidget(this); 
    treeWidget->setGeometry(0, 0, 500, 500); 
    treeWidget->setColumnCount(2); 
    treeWidget->setContextMenuPolicy(Qt::CustomContextMenu); 

    connect(treeWidget, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextMenuRequest(QPoint))); 

    QStringList headers; 
    headers << "Date" << "Message"; 

    treeWidget->setHeaderLabels(headers); 

    QTreeWidgetItem* errorItem = new QTreeWidgetItem(); 
    errorItem->setForeground(1, QBrush(QColor(255, 0, 0))); 
    errorItem->setText(0, QTime::currentTime().toString()); 
    errorItem->setText(1, "error message"); 

    QTreeWidgetItem* warningItem = new QTreeWidgetItem(); 
    warningItem->setForeground(1, QBrush(QColor(255, 165, 0))); 
    warningItem->setText(0, QTime::currentTime().toString()); 
    warningItem->setText(1, "warning message"); 

    treeWidget->addTopLevelItem(errorItem); 
    treeWidget->addTopLevelItem(warningItem); 

    for (int i = 0; i < 500; ++i) 
    { 
     QTreeWidgetItem* item; 
     if (i % 2) 
     { 
      item = errorItem->clone(); 
      treeWidget->addTopLevelItem(item); 
     } 
     else 
     { 
      item = warningItem->clone(); 
      treeWidget->addTopLevelItem(item); 
     } 
     treeWidget->scrollToItem(item); //call after adding new item 
    } 

    resize(500, 500); 
} 

MainWindow::~MainWindow() 
{ 

} 

void MainWindow::contextMenuRequest(const QPoint& pos) 
{ 
    QAction* openAction = new QAction("Open link", this); 
    connect(openAction, SIGNAL(triggered()), this, SLOT(openLink())); 

    QMenu menu; 
    menu.addAction(openAction); 

    menu.exec(mapToGlobal(pos)); 
} 

void MainWindow::openLink() 
{ 

} 
相關問題