2010-03-17 9 views
5
QMessageBox::about(this, "About Application", 
    "<h4>Application is a one-paragraph blurb</h4>\n\n" 
"Copyright 1991-2003 Such-and-such. " 
"For technical support, call 1234-56789 or see\n" 
"<a href=\"http://www.such-and-such.com\">http://www.such-and-such.com</a>"); 

Mã này được tạo hộp thư Về mà tôi muốn có với hai ngoại lệ:"Giới thiệu" hộp thông báo cho một giao diện với Qt

1) Tôi muốn thay đổi biểu tượng trong thông điệp hộp có tệp aaa.png

2) Và tôi muốn có liên kết có thể nhấp. Có vẻ như siêu liên kết (màu xanh lam và gạch dưới) nhưng nhấp chuột không hoạt động

Bất kỳ ý tưởng nào?

Trả lời

2

Tôi nghĩ bạn nên tạo một tùy chỉnh QWidget cho tiện ích con của bạn. Bằng cách này, bạn có thể đặt trên các widget tất cả các bạn muốn. Ví dụ: bạn có thể đặt QLabel bằng cách sử dụng thuộc tính openExternalLinks cho liên kết có thể nhấp.

Để hiển thị hình ảnh tùy chỉnh trên QWidget, điều này example có thể hữu ích.

1

Đối với biểu tượng, bạn chỉ cần đặt biểu tượng ứng dụng. Một cái gì đó như thế này:

QApplication::setWindowIcon(QIcon(":/aaa.png")); // from a resource file 

Để tạo liên kết có thể nhấp, tôi không nghĩ rằng nó có thể được thực hiện trực tiếp với API QMessageBox::about.

+0

OK, có thể bạn có thể cho tôi biết, nói chung, làm thế nào chúng tôi có thể tạo một widget với văn bản siêu liên kết bên trong? – Narek

1
QMessageBox msgBox; 
msgBox.setTextFormat(Qt::RichText); // this does the magic trick and allows you to click the link 
msgBox.setText("Text<br /><a href=\"http://www.such-and-such.com\">http://www.such-and-such.com</a>"); 
msgBox.setIcon(yourIcon); 
msgBox.exec(); 
0

Để tham khảo trong tương lai, các tài liệu nói rằng loại mặc định cho textFormat is Qt::AutoText. Các tài liệu tiếp tục tuyên bố rằng Qt::AutoText is interpreted as Qt::RichText if Qt::mightBeRichText() returns true, otherwise as Qt::PlainText. Cuối cùng, mightBeRichText uses a fast and therefore simple heuristic. It mainly checks whether there is something that looks like a tag before the first line break. Vì vậy, vì bạn không có thẻ trong dòng đầu tiên của bạn, nó giả định rằng nó là văn bản thuần túy. Đặt nó thành RichText một cách rõ ràng với msgBox.setTextFormat(Qt::RichText); để làm cho nó hoạt động phù hợp.

0

main.cpp

QApplication app(argc, argv); 
app.setWindowIcon(QIcon(":/images/your_icon.png")); 

mainwindow.cpp (vào khe của bạn nếu bạn có một)

void MainWindow::on_aboutAction_triggered() 
{ 
    QMessageBox::about(0, "window title", "<a href='http://www.jeffersonpalheta.com'>jeffersonpalheta.com</a>"); 
}