2012-05-15 39 views
5

Tôi mới làm quen với Qt và cần trợ giúp với những điều sau:Tiện ích bảng điền từ tệp văn bản trong Qt

Tôi muốn tạo một GUI có chứa một Widget bảng được điền thông tin từ một tab được phân tách tệp văn bản. Trong GUI của tôi, người dùng trước tiên sẽ duyệt tìm tệp văn bản và sau đó nó sẽ hiển thị nội dung trong Widget Bảng. Tôi đã thực hiện phần duyệt, nhưng làm cách nào để tải dữ liệu từ tệp văn bản vào Bảng Widget?

+0

Câu hỏi này là khá mơ hồ, bạn đang sử dụng MVC hoặc widget 'truyền thống'? Tiện ích bảng là 2D, vậy văn bản sẽ được sắp xếp như thế nào trong bảng? – cmannett85

+0

Trong Trình tạo Qt, có một điều khiển GUI được gọi là Bảng Widget, đó là những gì tôi đang sử dụng. Tôi nghĩ câu hỏi rất đơn giản. Tôi muốn điền một bảng trong GUI của tôi với một tệp văn bản được phân cách bằng tab làm nguồn dữ liệu. Nếu sử dụng một Widget Bảng, không phải là cách tiếp cận tốt nhất sau đó tôi mở cho các đề xuất khác. Như tôi đã đề cập, tôi mới làm quen với Qt. –

+0

Vâng 'QTableWidget' là tùy chọn tốt nhất nếu bạn chỉ muốn hiển thị văn bản, trong lưới 2D, mà không chia sẻ dữ liệu với bất kỳ tiện ích con nào khác. Ngoài ra, bạn sẽ nhận được phản hồi tốt hơn nếu bạn chỉ hỏi một câu hỏi trong bài đăng của mình: tải tệp văn bản, phân tích cú pháp vào các chuỗi riêng biệt và sau đó đẩy chúng vào một tiện ích bảng; là ba quy trình rất khác nhau và tôi sẽ ngạc nhiên nếu mỗi người trong số họ không được giải thích trên trang web này hoặc tài liệu. – cmannett85

Trả lời

8

Đó là hai bước, phân tích cú pháp tệp và sau đó đẩy tệp đó vào tiện ích con.

Tôi đã chụp những dòng này từ QFile documentation.

QFile file("in.txt"); 
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) 
    return; 

while (!file.atEnd()) { 
    QByteArray line = file.readLine(); 
    process_line(line); 
} 

chức năng process_line của bạn sẽ trông như thế này:

static int row = 0; 
QStringList ss = line.split('\t'); 

if(ui->tableWidget->rowCount() < row + 1) 
    ui->tableWidget->setRowCount(row + 1); 
if(ui->tableWidget->columnCount() < ss.size()) 
    ui->tableWidget->setColumnCount(ss.size()); 

for(int column = 0; column < ss.size(); column++) 
{ 
    QTableWidgetItem *newItem = new QTableWidgetItem(ss.at(column)); 
    ui->tableWidget->setItem(row, column, newItem); 
} 

row++; 

Để biết thêm thông tin về QTableWidgets thao tác, kiểm tra documentation. Đối với người dùng mới bằng cách sử dụng trình tạo GUI trong Qt Creator, đầu tiên bạn sẽ thấy khó khăn khi tìm ra nó.

Cuối cùng tôi khuyên bạn nên chuyển sang xây dựng GUI theo cách họ thực hiện trong tất cả examples ... bằng cách thêm mọi thứ bằng tay trong mã thay vì kéo và thả.

-2

Xin lỗi ...

void squidlogreader_::process_line(QString line) 
{ 
    static int row = 0; 
    QStringList ss = line.split('\t'); 

    if(ui->tableWidget->rowCount() < row + 1) 
    ui->tableWidget->setRowCount(row + 1); 
    if(ui->tableWidget->columnCount() < ss.size()) 
    ui->tableWidget->setColumnCount(ss.size()); 

    for(int column = 0; column < ss.size(); column++) 
    { 
    QTableWidgetItem *newItem = new QTableWidgetItem(ss.at(column)); 
    ui->tableWidget->setItem(row, column, newItem); 
    } 

    row++; 

} 
void squidlogreader_::on_pushButton_clicked() 
{ 
    QFile file("in.txt"); 
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) 
     return; 

    while (!file.atEnd()) { 
     QString line = file.readLine(); 
     process_line(line); 
    } 
Các vấn đề liên quan