Abra um projeto novo, observe que ele já tem uma barra de status logo abaixo
Adicione dois labels com dois line edit, um abaixo do outro, cada um com seu layout horizontal, um botão, e coloque todos num layout vertical. Os textos dos labels serão Nome, E-mail, e do botão, OK. Renomeie os componentes também.
Adicione o clicked no botão e coloque esse código:
void MainWindow::on_btnClick_clicked() {
ui->statusBar->showMessage("Mensagem Exibida no Status!");
}
PS: Essa função pode ser chamada no construtor também, de forma que ele inicialize já com o texto.
Para passar os textos das caixas pra barra, fazemos assim:
void MainWindow::on_btnClick_clicked() {
ui->statusBar->showMessage("Nome: " + ui->txtNome->text().trimmed() + " | E-mail: " + ui->txtMail->text().trimmed());
}
Adicione um botão, mas fora do layout, deixe ele logo abaixo deles, com o nome Status. E coloque esse código no construtor, para adicionar esse botão na barra:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this);
ui->statusBar->addPermanentWidget(ui->btnStat);
}
E no clicked do slot do botão Status, colocamos isso:
void MainWindow::on_btnStat_clicked() {
QString msg = "Mensagem do Status";
ui->statusBar->showMessage(msg);
QMessageBox::about(this, "Canal", msg); // Inclua QMessageBox
}
PS: Pode se adicionar vários elementos à barra de status, como por exemplo, labels.
Crie um novo projeto e coloque nele um Spin Box com o nome numEntr e um botão com o nome btnVerif. No evento do slot clicked do botão, coloque esse código aqui:
void MainWindow::on_btnVerif_clicked() {
int num = ui->numEntr->value();
int dobro = num * 2;
QMessageBox::information(this, "Info", "O dobro de " + QString::number(num) + " é " + QString::number(dobro) + "."); // Inclua QMessageBox
// O QString::number converte int para QString
}
Agora, coloque um Horizontal Slider com o nome sliNum e um label com o texto "0" e o nome lblNum. Adicione o slot action Triggered e coloque esse código:
void MainWindow::on_sliNum_actionTriggered(int action) {
ui->lblNum->setText(QString::number(ui->sliNum->value()));
}
PS: Podemos escolher nas propriedades desses componentes o mínimo, o máximo e o step dos números.
Basicamente, o arquivo de recursos armazena qualquer tipo de arquivo externo no nosso programa, por exemplo, imagens e músicas, e armazena num só local.
Crie um novo projeto, e na pasta do projeto, crie uma pasta com o nome imagens e coloque duas imagens nele.
No projeto, vá em add new, Qt e Qt Resource File, e coloque o nome ArquivoDeRecursos.
No arquivosderecursos.qtc, vá em add prefix, e coloque um caminho de pasta, como /img, e aí em add files, adicione nossas imagens.
PS: Podemos criar vários arquivos de recursos no mesmo programa, com vários tipos de arquivos.
Vá no formulário, adicione dois labels, e nas propriedades vá em pixmap, e em choose resource, e veja que nossas imagens adicionadas estarão lá. Escolha elas e redimensione.
Podemos também adicionar via código, coloque um label, mude o nome da variável dele, e no código do construtor coloque isso:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this);
QPixmap logo(":/img/imagens/nomedaimagen.png"); // Importe QPixmap, para pegar o caminho da imagem, vá em copy path
ui->lblImg->setPixmap(logo);
}
Crie um novo projeto e coloque dois line edit e dois labels, e um pushbutton, e organize cada label e campo com um layout horizontal, e coloque tudo além do botão num layout vertical. Mude os textos e os names das variáveis.
Mas dessa forma, ele exibirá as senhas, o que não é recomendável para mostrar isso. Para isso é só ir nas propriedades do campo de senha, e em echoMode colocar o modo password.
No sinal slot do botão, coloque esse código:
void MainWindow::on_btnEntr_clicked() {
QString login = ui->txtLogin->text().trimmed();
QString senha = ui->txtSenha->text().trimmed();
if(!login.compare("admin") && !senha.compare("123")) {
QMessageBox::information(this, "Login", "Bem-vindo ao Sistema!"); // inclua QMessageBox
}
else {
QMessageBox::critical(this, "Login", "Usuário ou Senha Incorreta!");
}
}
Abra um novo projeto no QT, e adicione um label e um botão. Aumente o tamanho dele e coloque um título nele (como o curso de QT creator).
Podemos colocar diretamente as tags HTML no formulário, como a h1, dessa forma, ele passará a abrir numa janela pra formatação, quando clicarmos nele. Vá na opção sources para continuar e deixe o conteúdo assim:
<div style="color: #000088">Curso de C++</div><div style="color: #880000">QT Creator</div>
PS: Podemos usar a opção rich text para colocar um tamanho maior.
Coloque outro label, com por exemplo, um link para um site. Nesse iremos ir em propriedades, em stylesheet e colocar os parâmetros CSS diretamente, por exemplo:
text-align: center;
color: #008800;
font-size: 15pt;
PS: Ambas as formas podem ser usados juntos.
Vamos formatar o botão, indo no stylesheet dele, colocando isso:
color: #ffffff;
background-color: #660000;
border-radius: 20px;
font-size: 13pt;
Adicione um resource file (arquivo de recursos), indo em QT e resource file, e adicione no prefixs o diretório /imgs, e adicione nele uma imagem. Copie o path dela e no formulário, crie mais um label, e nesse label, coloque esse código:
<img src=":/imgs/logo.png"/>
Como visto acima, podemos colocar tags como as de imagens também. Inclusive podemos colocar imagens de fundo via CSS e outros códigos.
Crie um novo projeto e coloque três checkbox e três botões, e coloque o grupo de checkbox num layout vertical, e os botões em outro layout. Se quiser, marque a opção checked em propriedades para deixar ele marcado por padrão.
Nos checkbox, com os textos e variáveis alteradas, e o primeiro botão com o nome verificar, coloque no slot clicked esse código:
void MainWindow::on_btnVerif_clicked() {
bool cb1, cb2, cb3;
cb1 = ui->cxVerif1->isChecked();
cb2 = ui->cxVerif2->isChecked();
cb3 = ui->cxVerif3->isChecked();
/*
A variável msg é estática do tipo QString e é declarada
fora de qualquer função, pra ser global, da forma (classe e implementação):
static QString msg;
QString MainWindow::msg = "";
Abaixo é feita nova declaração pra limpeza:
*/
msg = "";
// Quatro ifs independentes:
if(cb1 == true) {
msg += "Caixa 1 marcada!\n";
}
if(cb2 == true) {
msg += "Caixa 2 marcada!\n";
}
if(cb3 == true) {
msg += "Caixa 3 marcada!";
}
if(!msg.compare("")) {
msg = "Nenhum Marcado!";
}
QMessageBox::information(this, "Checkbox", msg); // Inclua QMessageBox
}
Da forma acima, ele apenas verifica quais caixas estão ou não marcadas.
Para o segundo modo, coloque o slot do segundo botão, com o texto verificar vetor, com esse código:
void MainWindow::on_btnVerif2_clicked() {
bool cb[3];
cb[0] = ui->cxVerif1->isChecked();
cb[1] = ui->cxVerif2->isChecked();
cb[2] = ui->cxVerif3->isChecked();
msg = "";
for(int i = 0; i < 3; i++) {
if(cb[i] == true) {
msg += "Caixa " + QString::number((i + 1)) + " marcada!\n";
}
}
if(!msg.compare("")) {
msg = "Nenhum Marcado!";
}
QMessageBox::information(this, "Checkbox", msg); // Inclua QMessageBox
}
A diferença desse método para o primeiro, é o uso de vetor e laço for pra exibição.
Já no terceiro modo, vamos colocar o slot em cada checkbox, mas o de stateChanged(int), veja o código do primeiro, que é parecido nos outros dois:
void MainWindow::on_cxVerif1_stateChanged(int arg1) {
/*
Crie globalmente as variáveis m1, m2 e m3, estáticas, do tipo QString, inicializadas com "", cada uma é de um checkbox.
*/
msg = "";
if(arg1) { // Verifica se existe valor apenas
m1 = "Caixa 1 Marcada!\n";
}
else {
m1 = "Caixa 1 Desmarcada!\n";
}
}
E aí, no terceiro botão, basta colocar isso:
void MainWindow::on_btnVerif3_clicked() {
msg = m1 + m2 + m3;
QMessageBox::information(this, "Checkbox", msg); // Inclua QMessageBox
msg = "";
}
Dessa forma acima, pegamos o estado de cada checkbox.